Make gtk_tree_model_foreach robust
authorMatthias Clasen <mclasen@redhat.com>
Tue, 9 Dec 2014 05:41:11 +0000 (00:41 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 9 Dec 2014 05:42:40 +0000 (00:42 -0500)
Make gtk_tree_model_foreach safe for callbacks that modify
the model, even if the model does not have persistent iters.

https://bugzilla.gnome.org/show_bug.cgi?id=722781

gtk/gtktreemodel.c

index 39065621f762b1cc8470ce45745b019ba683b583..8bbf55d0258364c5061dae1ed3bdc4551c051f86 100644 (file)
@@ -1969,6 +1969,10 @@ gtk_tree_model_foreach_helper (GtkTreeModel            *model,
                                GtkTreeModelForeachFunc  func,
                                gpointer                 user_data)
 {
+  gboolean iters_persist;
+
+  iters_persist = gtk_tree_model_get_flags (model) & GTK_TREE_MODEL_ITERS_PERSIST;
+
   do
     {
       GtkTreeIter child;
@@ -1976,6 +1980,12 @@ gtk_tree_model_foreach_helper (GtkTreeModel            *model,
       if ((* func) (model, path, iter, user_data))
         return TRUE;
 
+      if (!iters_persist)
+        {
+          if (!gtk_tree_model_get_iter (model, iter, path))
+            return TRUE;
+        }
+
       if (gtk_tree_model_iter_children (model, &child, iter))
         {
           gtk_tree_path_down (path);